package com.banmao.CarlCamp.Day05;

import java.util.HashSet;

/**
 * https://leetcode.cn/problems/happy-number/
 */
public class LC202 {

    public boolean isHappy(int n) {
        // 不记得了，能直接解，但是如果不是快乐数就会进入无限循环
        // 所以难点在于怎么判断这个数是否会进入无限循环？
        // 看了提示，用 Set 集合 —— 进入无限循环则表示，有一个数字重复出现了
        // 因此将 sum 的结果放入 Set 集合中，通过判断是否重复出现一个结果来进行循环的跳出

        HashSet<Integer> set = new HashSet<>();
        int sum = n;
        while (sum != 1) {
            sum = countSum(sum);
            if (set.contains(sum)) {
                return false;
            }
            set.add(sum);
        }

        return true;
    }

    private int countSum(int n) {
        int sum = 0;
        while (n > 0) {
            int num = n % 10;
            n = n / 10;
            sum += num * num;
        }
        return sum;
    }

    public static void main(String[] args) {
        LC202 lc202 = new LC202();
        System.out.println(lc202.isHappy(19));

    }

}
